package br.org.etec.dotcao.ws;

import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;

import br.org.etec.dotcao.exception.UserNotLoggedIn;
import br.org.etec.dotcao.model.News;
import br.org.etec.dotcao.model.NewsRepository;
import br.org.etec.dotcao.model.RepositoryFactory;
import br.org.etec.dotcao.model.User;
import br.org.etec.dotcao.service.ServiceFactory;
import br.org.etec.dotcao.utils.SessionUtils;

@Path("/news")
public class NewsResource implements Resource<News>{
	
	@GET
	@Path("/get")
	@Produces({MediaType.APPLICATION_JSON})
	public List<News> returnAll(@QueryParam("title") String title, @QueryParam("date") Date date){
		return ((NewsRepository)RepositoryFactory.get(News.class)).all(title, date);
	}

	@POST
	@Path("/save")
	@Produces({MediaType.APPLICATION_JSON})
	@Consumes({MediaType.APPLICATION_JSON})
	@Override
	public Message save(@Context HttpServletRequest request, News element) {
		if(element == null){
			return new Message("ERRO", "Não foi possível salvar a notícia. Dados inválidos.");
		}
		
		try {
			User logged = SessionUtils.logged(request);
			
			element.setSender(logged);
			element.save();
			return new Message("SUCESSO", "Dados salvos com sucesso.");
		} catch (UserNotLoggedIn e) {
			return new Message("ERRO", "É necessário estar logado no sistema para poder enviar notícias.");
		} catch (Exception e) {
			return new Message("ERRO", "Ocorreu um erro ao salvar os dados. Tente novamente mais tarde.");
		}
	}

	@GET
	@Path("/all")
	@Produces({MediaType.APPLICATION_JSON})
	@Override
	public List<News> all() {
		return ServiceFactory.get(News.class).all();
	}
}
